#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

// 链表节点结构体
typedef struct Node {
    int data;            // 节点存储的数据
    struct Node* next;   // 指向下一个节点的指针
} Node;

// 创建新节点
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (!newNode) {
        printf("Memory error\n");
        exit(0);
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// 将新节点添加到链表末尾
void appendNode(Node** head, int data) {
    Node* newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
        return;
    }
    Node* last = *head;
    while (last->next != NULL) {
        last = last->next;
    }
    last->next = newNode;
}

// 删除链表中值为key的第一个节点
void deleteNode(Node** head, int key) {
}
// 打印链表
void printList(Node* node) {
    while (node != NULL) {
        printf("%d -> ", node->data);
        node = node->next;
    }
    printf("NULL\n");
}

int main() {
    Node* head = NULL;

    // 添加节点
    appendNode(&head, 1);
    appendNode(&head, 2);
    appendNode(&head, 3);

    printf("Original List: ");
    printList(head);

    // 删除值为2的节点
    deleteNode(&head, 2);
    printf("List after deleting 2: ");
    printList(head);

    // 释放链表内存（实际应用中应确保链表所有节点都被正确释放）
    // 这里仅示例，完整的内存释放逻辑应遍历整个链表并释放每个节点
    Node* current = head;
    while (current != NULL) {
        Node* next = current->next;
        free(current);
        current = next;
    }
    head = NULL;

    return 0;
}